// 根据时间戳格式化日期，格式为 yyyy-MM-dd HH:mm:ss
const formatDate = (timestamp) => {
  // 创建一个 Date 对象
  let date = new Date(timestamp);
  // 获取年份
  let year = date.getFullYear();
  // 获取月份，注意月份是从 0 开始的，所以要加 1
  let month = date.getMonth() + 1;
  // 如果月份小于 10，要在前面补一个 0
  if (month < 10) {
    month = '0' + month;
  }
  // 获取日期
  let day = date.getDate();
  // 如果日期小于 10，要在前面补一个 0
  if (day < 10) {
    day = '0' + day;
  }
  // 获取小时
  let hour = date.getHours();
  // 如果小时小于 10，要在前面补一个 0
  if (hour < 10) {
    hour = '0' + hour;
  }
  // 获取分钟
  let minute = date.getMinutes();
  // 如果分钟小于 10，要在前面补一个 0
  if (minute < 10) {
    minute = '0' + minute;
  }
  // 获取秒钟
  let second = date.getSeconds();
  // 如果秒钟小于 10，要在前面补一个 0
  if (second < 10) {
    second = '0' + second;
  }
  
   // 拼接成字符串并返回
   return year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second;
}

// 获取当前日期，格式为 yyyy-MM-dd
function getCurrentDate() {
  // 创建一个 Date 对象
  let date = new Date();
  // 获取年份
  let year = date.getFullYear();
  // 获取月份，注意月份是从 0 开始的，所以要加 1
  let month = date.getMonth() + 1;
  // 如果月份小于 10，要在前面补一个 0
  if (month < 10) {
    month = '0' + month;
  }
  // 获取日期
  let day = date.getDate();
  // 如果日期小于 10，要在前面补一个 0
  if (day < 10) {
    day = '0' + day;
  }
  // 拼接成字符串并返回
  return year + '-' + month + '-' + day;
}

// 比较两个日期大小，格式为 yyyy-MM-dd
// 返回 -1 表示 date1 小于 date2
// 返回 0 表示 date1 等于 date2
// 返回 1 表示 date1 大于 date2
function compareDate(date1, date2) {
  // 把日期字符串转换成 Date 对象
  let d1 = new Date(date1);
  let d2 = new Date(date2);
  // 获取两个日期的毫秒数
  let n1 = d1.getTime();
  let n2 = d2.getTime();
  // 比较数值大小并返回结果
  if (n1 < n2) {
    return -1;
  } else if (n1 === n2) {
    return 0;
  } else {
    return 1;
  }
}


// 计算两个日期之间的天数，格式为 yyyy-MM-dd
// 返回一个正整数
function getDaysBetween(date1, date2) {
  // 把日期字符串转换成 Date 对象
  let d1 = new Date(date1);
  let d2 = new Date(date2);
  // 获取两个日期的毫秒数
  let n1 = d1.getTime();
  let n2 = d2.getTime();
  // 计算两个日期之间的毫秒差，除以一天的毫秒数，向上取整
  let days = Math.ceil(Math.abs(n2 - n1) / (24 * 60 * 60 * 1000));
  return days;
}

// 判断一个日期是否合法，格式为 yyyy-MM-dd
// 返回一个布尔值
function isValidDate(date) {
  // 把日期字符串转换成毫秒数
  let ms = Date.parse(date);
  // 判断是否是 NaN
  return !isNaN(ms);
}


//  格式化${startTime}距现在的已过时间
function formatPassTime(startTime) {
    var currentTime = Date.parse(new Date()),
        time = currentTime - startTime,
        day = parseInt(time / (1000 * 60 * 60 * 24)),
        hour = parseInt(time / (1000 * 60 * 60)),
        min = parseInt(time / (1000 * 60)),
        month = parseInt(day / 30),
        year = parseInt(month / 12);
    if (year) return year + "年前"
    if (month) return month + "个月前"
    if (day) return day + "天前"
    if (hour) return hour + "小时前"
    if (min) return min + "分钟前"
    else return '刚刚'
}

// 格式化现在距${endTime}的剩余时间
function formatRemainTime(endTime) {
    var startDate = new Date(); //开始时间
    var endDate = new Date(endTime); //结束时间
    var t = endDate.getTime() - startDate.getTime(); //时间差
    var d = 0,
        h = 0,
        m = 0,
        s = 0;
    if (t >= 0) {
        d = Math.floor(t / 1000 / 3600 / 24);
        h = Math.floor(t / 1000 / 60 / 60 % 24);
        m = Math.floor(t / 1000 / 60 % 60);
        s = Math.floor(t / 1000 % 60);
    }
    return d + "天 " + h + "小时 " + m + "分钟 " + s + "秒";
}

export {
	formatDate,
	getCurrentDate,
	compareDate,
	getDaysBetween,
	isValidDate,
	formatPassTime
}